import { defineStore } from 'pinia';
// @ts-ignore
import { reactive, ref } from 'vue';
import { getUserInfo } from '@/api/user';
import { Config } from "@/common/config"

export const useUserStore  = defineStore('user', () => {
	// 用户状态
	const state = reactive({
		name: '',
		mobile: '',
		avatar: '',
		superior_id: '',
		balance: '',
		store_balance: '',
		is_auth_userinfo: 0,
		created_at: '',
		updated_at: ''
	})

	const token = ref(null)
	// 登录状态
	const loginStatus = ref(false)
	const setToken = async (data:any) => {
		// 设置用户登录 Token
		token.value = data;

		try {
			// @ts-ignore
			uni.setStorageSync(Config.TOKEN_KEY, data);
			loginStatus.value = 1
		} catch (e) {
			// error
			console.log('token storage',e)
		}
	};

	const clearToken = () => {
		// 清除用户登录 Token
		token.value = '';
	};

	// 保存用户信息
	const saveProfile = (userProfile: any) => {
		// 状态
		state.name = userProfile?.name ?? ''
		state.mobile = userProfile?.mobile ?? ''
		state.avatar = userProfile?.avatar ?? ''
		state.superior_id = userProfile?.superior_id ?? ''
		state.balance = userProfile?.balance ?? ''
		state.store_balance = userProfile?.store_balance ?? ''
		state.is_auth_userinfo = userProfile?.is_auth_userinfo ?? ''
		state.created_at = userProfile?.created_at ?? ''
		state.updated_at = userProfile?.updated_at ?? ''
	}

	const syncUserInfo = async () => {
		const {code, data, message} = await getUserInfo({})
		if (code != 1) {
			// @ts-ignore
			uni.showToast({
				mask: true,
				title: message ?? '获取用户信息失败',
				icon: 'none'
			})
			return false
		}
		// 保存用户信息到本地存储
		saveProfile(data)
	}


	return {
		...toRefs(state),
		token,
		loginStatus,
		setToken,
		clearToken,
		syncUserInfo
	}
},{
	// 重要：模块必须开启持久化，才会持久化！！！
	// 注意：默认持久化，只在H5端有效，因为默认使用的是localStorage，小程序端不能使用这个API，所以需要重写存取方法，转调给UniApp的持久化方法
	// persist: true,
	persist: {
		// 默认值，就是使用localStorage
		// storage: localStorage
		// 重写存取方法，转调给UniApp
		storage: {
			getItem(key) {
				// @ts-ignore
				return uni.getStorageSync(key)
			},
			setItem(key, val) {
				// @ts-ignore
				uni.setStorageSync(key, val)
			}
		}
	}
})
